// c++提供两种模板机制：函数模板和类模板
// 函数模板语法：
// 作用
// 建立一个通用函数，其函数返回值类型和形参类型可以不具体定制，用一个虚拟的类型来代表
// 语法：
// template<typename T>
// 函数声明或定义
// template -- 声明创建模板
// T -- 通用的数据类型，名称可以替换，通常为大写字母
// typename -- 表面其后面的符号是一种数据类型，可以用class代替
#include <iostream>
using namespace std;
// 两个整型交换函数
void swapInt(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}

// 交换两个浮点型函数
void swapDouble(double& a, double& b) {
    int temp = a;
    a = b;
    b = temp;
}

// 函数模板
template <
    typename T>  // 声明一个模板，告诉编译器后面代码中紧跟着的T不要报错，T是一个通用数据类型
void mySwap(T& a, T& b) {
    T temp = a;
    a = b;
    b = temp;
}
void test01() {
    int a = 10;
    int b = 20;
    // 利用函数模板交换
    // 两种方式使用函数模板
    // 1.自动类型推导
    // mySwap(a, b);
    //  swapInt(a, b);
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    // 2.显示指定内存
    mySwap<int>(a, b);
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    double c = 1.1;
    double d = 2.2;
    mySwap<double>(c, d);
    // swapDouble(c, d);
    // cout << "c = " << c << endl;
    // cout << "d = " << d << endl;
}
int main() {
    test01();
    system("pause");
    return 0;
}
